package com.xx.shardingsphere.config;

import java.util.Collection;

import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;

/**
 * 精确分片算法类名称，用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器
 */

/**
 * 标准分片策略
 * 
 * @param <T>
 *            分片键类型
 */
public class MyPreciseShardingAlgorithm implements PreciseShardingAlgorithm<String> {

	/**
	 * Sharding.
	 * 
	 * @param 可选数据库或可选表的名字
	 * @param 分片键
	 * @return 选中的库或者表
	 */
	@Override
	public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
		// 实现 对ID哈希取模
		int partition = availableTargetNames.size();// 分片数
		// 增加位运算 保证没有负数
		int num = (shardingValue.getValue().hashCode() & Integer.MAX_VALUE) % partition;
		Object[] strs = availableTargetNames.toArray();
		System.out.println("分片结果" + strs[num].toString());

		return strs[num].toString();
	}

}
